<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

class Nippy_Controller_Maillist_SenderAbstract extends Zend_Controller_Action{
	public function init(){
        parent::init();
		$this->getHelper('layout')->disableLayout(true);
    }
    /*
     * TODO: Метод добавления подсписчика уже есть тут: Maillist_SubscribersController, подумать как бы его оттуда захватить сюда
     * Добавляет нового подписчика
     */
    protected function _addSubscriber($params){
        $f = new Maillist_Form_Subscriber();
        if (!$f->isValid($params)){
            $this->_helper->json ( array('success'=>false, 'msg'=>'Форма не заполнена'));
            return;    
        }
        $params['JoinDate'] = date("Y-m-d");
        $params['Active'] = 1;
        try{
            $mapper = new Maillist_Model_SubscribersMapper( );
            $mapper->save($params);
            $result ['success'] = true;
        }
        catch(Exception $e)
        {
            $result ['success'] = false;
            $result ['msg'] = 'Неизвестная ошибка';
        }
        $this->_helper->json ( $result );
        
    }
    /*
     * Производит отправку рассылки подписчивам
     * @param $fromEmail string адрес от лица которого производится рассылка
     * @param $fromName string имя адреса в адресной книге от лица которого производится рассылка (произвольное)
     * @param $templateViewScript string шаблон рассылки
     * @param $sendLimit int лимит отправки рассылок за один вызов
    */
    protected function _send($fromEmail,$fromName,$templateViewScript,$sendLimit ){
        $this->_helper->viewRenderer->setNoRender(true);
        $postsMapper = new Maillist_Model_PostsMapper();
        $spMapper = new Maillist_Model_SubscribersPostsMapper();
        $list = $postsMapper->fetchPost4Sending($sendLimit);

        if ((null==$list) || (count($list)==0)) return;

        $mail = new Zend_Mail('utf-8');
        foreach ($list as $l){
            list($this->view->post,$this->view->subscriber) = $l;
            $mail->clearSubject()->setSubject($this->view->post->getSubject());
            $mail->clearFrom()->setFrom($fromEmail, $fromName);
            $this->view->id = $this->view->subscriber->getId();
            $this->view->hash = $this->_getSaltedMD5Id($this->view->id);
            $body = $this->view->render($templateViewScript);
            $mail->clearRecipients()
                ->addTo($this->view->subscriber->getEmail(),$this->view->subscriber->getName1())
                ->setBodyHtml($body,'UTF-8',Zend_Mime::ENCODING_BASE64)
                ->send();
            //$subscr->setPostId($this->view->post->getId());
            $spMapper->save(array('SubscriberId'=>$this->view->subscriber->getId(),'PostId'=>$this->view->post->getId()));
            //$mapper->save(array('Id'=>$this->view->subscriber->getId(), 'PostId'=>$this->view->subscriber->getPostId()));
            echo "Рассылка ".$this->view->post->getId()." отправлена ".$this->view->subscriber->getId();
        }
    }
    /*
     * Возвращает посоленый хеш от идентификатора
     * @param $id int идентификатор пользователя
    */
    protected function _getSaltedMD5Id($id){
        $b = $this->getInvokeArg('bootstrap');
        if (!$b->hasOption('cryptoSalt'))
            throw new Zend_Exception("cryptoSalt wasn't specified in application.ini");
        $salt = $b->getOption('cryptoSalt');
        if ($salt=="")
            throw new Zend_Exception("cryptoSalt is empty");
        return md5($id.$salt);
    }
    /*
     * Отписывает пользователя от рассылки
     * @param $id int идентификатор пользователя
     * @param $hash string хеш идентификатора с с олью из конфига cryptoSalt
    */
    protected function _unsubscribe($id,$hash){
        if (($id==0) || ($hash==''))
            throw new Zend_Exception("Params was not set");
        if ($this->_getSaltedMD5Id($id)!=$hash)
            throw new Zend_Exception("Hash error");
        $mapper =new Maillist_Model_SubscribersMapper();
        $params['Id'] = $id;
        $params['Active'] = 0;
        $mapper->save($params);
    }
}

?>